package error

/**
什么是错误？
错误表示程序中出现了异常情况。比如当我们试图打开一个文件时，文件系统里却并没有这个文件。这就是异常情况，它用一个错误来表示。
在 Go 中，错误一直是很常见的。错误用内建的 error 类型来表示。
就像其他的内建类型（如 int、float64 等），错误值可以存储在变量里、作为函数的返回值等等。
*/

import (
	"fmt"
	"net"
	"os"
	"path/filepath"
	ttcase1 "study_demo/src/error/case1"
)

func Test() {
	fmt.Println()

	ttcase1.Test()

}

func case1() {
	// 打开一个不存在的文件
	f, err := os.Open("/test.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(f.Name(), "打开成功。。。")
}

// 接下来我们编写一个程序，断言*DNSError 类型，并调用这些方法来确定该错误是临时性错误，还是由超时导致的。
func case2() {
	addr, err := net.LookupHost("golangbot123.com")
	if err, ok := err.(*net.DNSError); ok {
		if err.Timeout() {
			fmt.Println("operation timed out")
		} else if err.Temporary() {
			fmt.Println("temporary error")
		} else {
			fmt.Println("generic error: ", err)
		}
		return
	}
	fmt.Println(addr)
}

// 直接比较 error
func case3() {
	files, error := filepath.Glob("[")
	if error != nil && error == filepath.ErrBadPattern {
		fmt.Println(error)
		return
	}
	fmt.Println("matched files", files)
}
